package com.fingard.util;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Date;
import java.util.Properties;

public class EmailUtil {
    /**
     * 功能描述: 发送邮件的基本配置
     *
     * @param sendEmail     发件人地址
     * @param sendEmailPwd  授权码代替密码（更安全） 授权码的获取：进入个人邮箱，点击设置–>账户， SMTP服务选项 默认情况下这个选项是不开启的。
     *                      点击开启腾讯会进行身份验证，身份验证通过以后，会收到一个用于使用SMTP的16位口令，
     *                      验证身份的过程中把收到的口令保存下来，因为后面要使用SMTP功能必须要用到这个口令。
     * @param subject       邮件主题
     * @param content       邮件内容
     * @param toEmilAddress 收件人地址
     * @param carbonCopyEmail 抄送人地址
     * @throws Exception
     * @Title: sendEmail
     * @Description: 发送邮件工具类方法
     * @return: void
     * @since: 1.0.0 2018/11/18 19:04
     */
    public static void sendEmail(Properties properties, String sendEmail, String subject, String content,String toEmilAddress,String carbonCopyEmail, String user, String sendEmailPwd) {
        if (toEmilAddress != null) {
            // 使用java发送邮件的步骤如下
            //1、创建session
            Session session = Session.getInstance(properties);
            //开启session的调试模式，可以查看当前邮件发送状态
            session.setDebug(true);
            //创建邮件对象
            MimeMessage message = new MimeMessage(session);
            try {
                //设置发件人
                message.setFrom(new InternetAddress(sendEmail));
                //设置收件人地址，以逗号隔开
                InternetAddress[] sendTo = InternetAddress.parse(toEmilAddress);
                message.setRecipients(MimeMessage.RecipientType.TO, sendTo);

                //设置收件人地址，以逗号隔开
                InternetAddress[] carbonCopy = InternetAddress.parse(carbonCopyEmail);
                message.setRecipients(MimeMessage.RecipientType.CC, carbonCopy);

                //加载标题
                message.setSubject(subject);
                // 设置发送时间
                message.setSentDate(new Date());
                // 设置邮件的文本内容
                // 向multipart对象中添加邮件的各个部分内容，包括文本内容和附件
                Multipart multipart = new MimeMultipart();
                BodyPart contentPart = new MimeBodyPart();
                contentPart.setContent(content, "text/html;charset=utf-8");
                multipart.addBodyPart(contentPart);
                message.setContent(multipart);
                message.saveChanges(); //保存邮件
                //2、通过session获取Transport对象（发送邮件的核心API）
                Transport transport = session.getTransport("smtp");
                // 3、通过邮件用户名密码链接
                transport.connect(properties.getProperty("mail.smtp.host"), user, sendEmailPwd);
                //5、发送电子邮件
                transport.sendMessage(message, message.getAllRecipients());
                transport.close();//关闭连接.
                System.out.println("send success!");
            } catch (MessagingException e) {
                e.printStackTrace();
                System.out.println("邮件发送失败:\r\n" + e.getMessage());
            }
        } else {
            System.out.println("收件人地址为空,请检查配置mail.properties");
        }
    }
}